package chapter6;
import java.util.Scanner;
/****************************************************************
 * Author：icynlau
 * Description: 编写程序判断点与直线的相对位置： 左侧 右侧 直线 或线段上
 * 
 * 我直接复用3.32的程序
 * Date:2021/4/6
 * ***************************************************************
 */
public class exc6_39 {
	
	public static void main(String[] args) {
		
		Scanner input=new Scanner(System.in);
		
		System.out.print("Enter three points for p0,p1,p2 : ");
		double x0=input.nextDouble();
		double y0=input.nextDouble();
		double x1=input.nextDouble();
		double y1=input.nextDouble();
		double x2=input.nextDouble();
		double y2=input.nextDouble();
		
	
		
		if(leftOfTheLine(x0,y0,x1,y1,x2,y2)) {
			
			System.out.printf("(%.1f , %.1f ) is on the left side of the line",x2,y2);
			
		}else if(rightOfTheLine(x0,y0,x1,y1,x2,y2)) {
			
			System.out.printf("(%.1f , %.1f ) is on the right side of the line",x2,y2);
			
		}else if(onTheSameLine(x0,y0,x1,y1,x2,y2) && !onTheLineSegment(x0,y0,x1,y1,x2,y2)) {
			
			System.out.printf("(%.1f , %.1f ) is on the same line",x2,y2);
			
		}else if(onTheLineSegment(x0,y0,x1,y1,x2,y2)) {
			
			System.out.printf("(%.1f , %.1f ) is on the line segment",x2,y2);
			
		}else {
			System.out.print("Error\n");
		}
		
	}

	public static boolean leftOfTheLine(double x0,double y0,
			double x1,double y1,double x2,double y2) {
		
		return ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))>0;
		
	}
	
	public static boolean rightOfTheLine(double x0,double y0,
			double x1,double y1,double x2,double y2) {
		return ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))<0;
	}
	
	public static boolean onTheSameLine(double x0,double y0,
			double x1,double y1,double x2,double y2) {
		return ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))==0;
	}
	
	public static boolean onTheLineSegment(double x0,double y0,
			double x1,double y1,double x2,double y2) {
		
		return (((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))==0&&
				( x2> Math.min(x1, x0)  )&&(x2<Math.max(x1, x0))  );
		
	}
	
	
}
